﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using LCTMoodle.Models.ViewModels;
using LCTMoodle.Models.DataModels;

namespace LCTMoodle.Service
{
    public class BaiVietService : Service
    {
        /// <summary>
        /// Lấy bài viết của diễn đàn theo mã khóa học
        /// </summary>
        /// <param name="maKhoaHoc">Mã khóa học</param>
        /// <param name="tu">Từ dòng thứ...</param>
        /// <param name="den">Đến dòng thứ... (-1 nếu muốn lấy toàn bộ)</param>
        /// <returns></returns>
        public static List<BaiVietViewModel> layBaiVietTheoMaKhoaHoc_DienDan(int maKhoaHoc, int tu, int den)
        {
            return Service.executeDataReader_List<BaiVietViewModel>
            (
                "layBaiVietTheoMaKhoaHoc_DienDan",
                new object[]
                {
                    maKhoaHoc,
                    tu,
                    (den == -1) ? (object)DBNull.Value : den
                }
            );
        }
        /// <summary>
        /// Lấy bài viết của bài giảng theo mã khóa học
        /// </summary>
        /// <param name="maKhoaHoc">Mã khóa học</param>
        /// <param name="tu">Từ dòng thứ...</param>
        /// <param name="den">Đến dòng thứ... (-1 nếu lấy tất cả)</param>
        /// <returns></returns>
        public static List<BaiVietViewModel> layBaiVietTheoMaKhoaHoc_BaiGiang(int maKhoaHoc, int tu, int den)
        {
            return Service.executeDataReader_List<BaiVietViewModel>
            (
                "layBaiVietTheoMaKhoaHoc_BaiGiang",
                new object[]
                {
                    maKhoaHoc,
                    tu,
                    (den == -1) ? (object)DBNull.Value : den
                }
            );
        }
        /// <summary>
        /// Lấy bài viết của bài tập theo mã khóa học
        /// </summary>
        /// <param name="maKhoaHoc">Mã khóa học</param>
        /// <param name="tu">Từ dòng thứ...</param>
        /// <param name="den">Đến dòng thứ... (-1 nếu lấy tất cả)</param>
        /// <returns></returns>
        public static List<BaiVietViewModel> layBaiVietTheoMaKhoaHoc_BaiTap(int maKhoaHoc, int tu, int den)
        {
            return Service.executeDataReader_List<BaiVietViewModel>
            (
                "layBaiVietTheoMaKhoaHoc_BaiTap",
                new object[]
                {
                    maKhoaHoc,
                    tu,
                    (den == -1) ? (object)DBNull.Value : den
                }
            );
        }
        /// <summary>
        /// Lấy bài viết của tài liệu theo mã khóa học
        /// </summary>
        /// <param name="maKhoaHoc">Mã khóa học</param>
        /// <param name="tu">Từ dòng thứ...</param>
        /// <param name="den">Đến dòng thứ... (-1 nếu lấy tất cả)</param>
        /// <returns></returns>
        public static List<BaiVietViewModel> layBaiVietTheoMaKhoaHoc_TaiLieu(int maKhoaHoc, int tu, int den)
        {
            return Service.executeDataReader_List<BaiVietViewModel>
            (
                "layBaiVietTheoMaKhoaHoc_TaiLieu",
                new object[]
                {
                    maKhoaHoc,
                    tu,
                    (den == -1) ? (object)DBNull.Value : den
                }
            );
        }
        /// <summary>
        /// Thêm bài viết
        /// </summary>
        /// <param name="baiViet">Tham số gồm có:
        /// Mã khóa học, mã người tạo, tiêu đề, nội dung, mã tập tin (= 0 nếu không có => NULL), nhóm bài viết</param>
        /// <returns></returns>
        public static int themBaiViet(BaiVietDataModel baiViet)
        {
            return executeScalar<int>(
                "themBaiViet",
                new object[] 
                {
                    baiViet.maKhoaHoc,
                    baiViet.maNguoiTao,
                    baiViet.tieuDe,
                    baiViet.noiDung,
                    (baiViet.maTapTin == 0) ? (object)DBNull.Value : baiViet.maTapTin,
                    baiViet.nhomBaiViet
                }
            );
        }
        /// <summary>
        /// Cập nhật bài viết
        /// </summary>
        /// <param name="baiViet">Gồm mã, tiêu đề, nội dung</param>
        /// <returns></returns>
        public static bool capNhatBaiVietTheoMaBaiViet(BaiVietViewModel baiViet)
        {
            return executeNonQuery(
                    "capNhatBaiVietTheoMaBaiViet",
                    new object[]
                    {
                        baiViet.ma,
                        baiViet.tieuDe,
                        baiViet.noiDung
                    }
                );
        }
        /// <summary>
        /// Xóa bài viết theo mã bài viết
        /// </summary>
        /// <param name="maBaiViet">Mã bài viết cần xóa</param>
        public static bool xoaBaiVietTheoMaBaiViet(int maBaiViet)
        {
            return executeNonQuery(
                "xoaBaiVietTheoMaBaiViet",
                new object[]
                {
                    maBaiViet
                }
            );
        }
        /// <summary>
        /// Lấy bài viết theo mã bài viết
        /// </summary>
        /// <param name="maBaiViet">Mã bài viết cần lấy</param>
        /// <returns></returns>
        public static BaiVietViewModel layBaiVietTheoMaBaiViet(int maBaiViet)
        {
            return Service.executeDataReader<BaiVietViewModel>
            (
                "layBaiVietTheoMaBaiViet",
                new object[] 
                {
                    maBaiViet
                }
            );
        }
        /// <summary>
        /// Cập nhật bài viết được ghim của diễn đàn
        /// </summary>
        /// <param name="maBaiViet">Mã bài viết ghim</param>
        public static bool capNhatGhimBaiVietTheoMaBaiViet_DienDan(int maBaiViet)
        {
            return executeNonQuery
                (
                    "capNhatGhimBaiVietTheoMaBaiViet_DienDan",
                    new object[]
                    {
                        maBaiViet,
                        true
                    }
                );
        }
        /// <summary>
        /// Xóa ghim bài viết
        /// </summary>
        /// <param name="maBaiViet">Mã bài viết</param>
        public static bool BoGhimBaiVietTheoMaBaiViet_DienDan(int maBaiViet)
        {
            return executeNonQuery
                (
                    "capNhatGhimBaiVietTheoMaBaiViet_DienDan",
                    new object[]
                    {
                        maBaiViet,
                        false
                    }
                );
        }
        /// <summary>
        /// Cập nhật tăng giảm thứ tự bài viết
        /// </summary>
        /// <param name="maBaiViet">Mã bài viết</param>
        /// <param name="tang">true nếu tăng, false nếu giảm</param>
        public static bool capNhatTangGiamThuTuBaiViet(int maBaiViet, bool tang)
        {
            return executeNonQuery
                (
                    "capNhatTangGiamThuTuBaiViet",
                    new object[] 
                    {
                        maBaiViet,
                        tang
                    }
                );
        }
    }
}